/**
 * 表单工具函数
 */

/**
 * 移除表单数据中不需要提交的字段
 * 这些字段通常是后端自动生成的审计字段，不应该由前端提交
 * 
 * @param data 原始表单数据
 * @returns 清理后的数据
 */
export function removeAuditFields<T extends Record<string, any>>(data: T): Partial<T> {
  const {
    createTime,
    createBy,
    updateTime,
    updateBy,
    createName,
    updateName,
    ...cleanData
  } = data;

  return cleanData;
}

/**
 * 移除表单数据中不需要提交的字段（包括 id）
 * 用于新增操作，id 由后端生成
 * 
 * @param data 原始表单数据
 * @returns 清理后的数据
 */
export function removeAuditFieldsWithId<T extends Record<string, any>>(data: T): Partial<T> {
  const {
    id,
    createTime,
    createBy,
    updateTime,
    updateBy,
    createName,
    updateName,
    ...cleanData
  } = data;

  return cleanData;
}

/**
 * 准备提交数据（编辑模式）
 * 移除审计字段，保留 id
 * 
 * @param data 原始表单数据
 * @returns 清理后的数据
 */
export function prepareUpdateData<T extends Record<string, any>>(data: T): Partial<T> {
  return removeAuditFields(data);
}

/**
 * 准备提交数据（新增模式）
 * 移除审计字段和 id
 * 
 * @param data 原始表单数据
 * @returns 清理后的数据
 */
export function prepareCreateData<T extends Record<string, any>>(data: T): Partial<T> {
  return removeAuditFieldsWithId(data);
}

